package word.attribute;

import org.json.simple.JSONObject;

import java.io.File;
import java.util.ArrayList;

/**
 * 단어 추가속성 목록
 */
public class AttributeList
{
	private static ArrayList<AdditionalAttribute> attributes; // 속성목록

	private static AttributeList instance = new AttributeList(); // 싱글톤 인스턴스

	/**
	 * 생성자
	 */
	public AttributeList()
	{
		try
		{
			File file = new File(".\\word\\attribute\\");
			File[] classFiles = file.listFiles();
			for (File i : classFiles)
				Class.forName("word.attribute." + i.getName().substring(0, i.getName().indexOf('.')));
		}
//		catch (InstantiationException e)
//		{
//			e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
//		}
//		catch (IllegalAccessException e)
//		{
//			e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
//		}
		catch (ClassNotFoundException e)
		{
			e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
		}
	}

	/**
	 * 속성종류를 추가하는 메서드
	 * @param attribute : 속성
	 */
	public static void addAttribute(AdditionalAttribute attribute)
	{
		if (attributes == null)
			attributes = new ArrayList<AdditionalAttribute>();
		attributes.add(attribute);
	}

	/**
	 * 속성의 개수를 반환하는 메서드
	 * @return : 속성의 개수
	 */
	public static int getCount()
	{
		if (attributes == null)
			attributes = new ArrayList<AdditionalAttribute>();
		return attributes.size();
	}

	/**
	 * 속성의 이름을 가져오는 메서드
	 * @param index : 속성 번호
	 * @return      : 속성의 이름
	 */
	public static String getName(int index)
	{
		return attributes.get(index).getName();
	}

	public static AdditionalAttribute get(int index)
	{
		return attributes.get(index);
	}

	public static AdditionalAttribute parseJSON(JSONObject object)
	{
		String name = (String) object.get("name");
		if (findAttributeByName(name) != null)
			return findAttributeByName(name).createAttributeByJSON(object);

		else return null;
	}

	public static AdditionalAttribute findAttributeByName(String name)
	{
		for (AdditionalAttribute i : attributes)
			if (i.getName().equals(name))
				return i;

		return null;
	}
}